package cn.iocoder.yudao.module.vote.service.voteuserresult;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.vote.controller.admin.voteinfo.vo.OnlineVoteParamsVO;
import cn.iocoder.yudao.module.vote.controller.admin.voteuserresult.vo.*;
import cn.iocoder.yudao.module.vote.dal.dataobject.voteuserresult.VoteUserResultDO;
import com.baomidou.mybatisplus.extension.service.IService;

import javax.validation.Valid;
import java.util.Collection;
import java.util.List;

/**
 * 投票结果 Service 接口
 *
 * @author 芋道源码
 */
public interface VoteUserResultService extends IService<VoteUserResultDO> {

    /**
     * 创建投票结果
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Integer createUserResult(@Valid VoteUserResultCreateReqVO createReqVO);

    /**
     * 更新投票结果
     *
     * @param updateReqVO 更新信息
     */
    void updateUserResult(@Valid VoteUserResultUpdateReqVO updateReqVO);

    /**
     * 批量更新用提交的结果
     * @param onlineReq
     */
    public void updateOnlineResult(VoteOnlineUpdateReqVO onlineReq);

    /**
     * 删除投票结果
     *
     * @param id 编号
     */
    void deleteUserResult(Integer id);

    /**
     * 获得投票结果
     *
     * @param id 编号
     * @return 投票结果
     */
    VoteUserResultDO getUserResult(Integer id);

    /**
     * 获得投票结果列表
     *
     * @param ids 编号
     * @return 投票结果列表
     */
    List<VoteUserResultDO> getUserResultList(Collection<Integer> ids);

    /**
     * 获得投票结果分页
     *
     * @param pageReqVO 分页查询
     * @return 投票结果分页
     */
    PageResult<VoteUserResultDO> getUserResultPage(VoteUserResultPageReqVO pageReqVO);

    /**
     * 获得投票结果列表, 用于 Excel 导出
     *
     * @param exportReqVO 查询条件
     * @return 投票结果列表
     */
    List<VoteUserResultDO> getUserResultList(VoteUserResultExportReqVO exportReqVO);

    /**
     * 投票用户信息导入
     * @param importUsers
     * @param voteId
     * @param isUpdateSupport
     * @return
     */
    VoteUserResultImportRespVO importVoteResultUsers(List<VoteUserResultImportExcelVO>importUsers, Integer voteId, boolean isUpdateSupport);
//    /**
//     * 统计组数
//     * @param voteId
//     * @param groupName
//     * @return
//     */
//    List<VoteUserResultGroupVO> groupByGroupName(Integer voteId,String groupName);

    /**
     * 投票统计
     * @param voteId
     */
    public void countVoteResult(Integer voteId);

    /**
     * 统计每组内的排名
     * @param voteId
     * @param groupName
     * @return
     */
    List<VoteUserResultGroupVO> countByGroupNameSort(Integer voteId,String groupName);

    /**
     *
     * @return
     */
    public List<VoteYearUserResultDeptRespVO> getH5VoteList(OnlineVoteParamsVO paramsVO,Long deptId);



    /**
     * 获取已投票结果信息
     * @return
     */
    public List<VoteYearUserResultDeptRespVO> getH5UserVotedList(OnlineVoteParamsVO paramsVO,String ip);

    /**
     *
     * @param voteId
     * @return
     */
    List<VoteUserResultDO> getByVoteIdAndGroupId(Integer voteId, Integer groupId);
}
